package com.ynet.middleground.contract.service;

import java.util.List;
import java.util.Map;

import javax.validation.Valid;

import com.ynet.core.common.ServiceResult;
import com.ynet.middleground.contract.bean.*;

/**
 * @author liulx
 * @description 存证服务定义
 * @date 2020-04-15 13:59
 */
public interface EviService {

    /**
     * 定义所属行业类型-数据字典，永久使用 <br />
     * 如：医学卫生
     * 
     * @param addIndustryTypeReq 定义行业所属类型请求类
     * @return 添加成功后 ID 和名称的对应列表
     */
    ServiceResult<Map<String, Object>> createIndustryType(@Valid AddIndustryTypeReq addIndustryTypeReq);

    /**
     * 定义业务凭证（名称） <br />
     * 如：新冠病毒临床治疗
     * 
     * @param addSceneTypeReq 定义业务凭证（名称）请求类
     * @return 添加成功后 ID 和名称的对应列表
     */
    ServiceResult<Map<String, Object>> createSceneType(@Valid AddSceneTypeReq addSceneTypeReq);

    /**
     * 定义业务凭证中某一证据点名称 <br />
     * (如：治疗合同签署人信息)
     * 
     * @param addSegmentTypeReq 定义业务凭证中某一证据点名称请求类
     * @return 添加成功后 ID 和名称的对应列表
     */
    ServiceResult<Map<String, Object>> createSegmentType(@Valid AddSegmentTypeReq addSegmentTypeReq);

    /**
     * 定义业务凭证中某一证据点的字段属性 <br />
     * (如：姓名-name) 设置显示名称与参数名称的对应关系
     * 
     * @param addSegmentPropTypeReq 定义业务凭证中某一证据点的字段属性请求类
     * @return 添加成功后的对应列表
     */
    ServiceResult<List<Object>> createSegmentProType(@Valid AddSegmentPropTypeReq addSegmentPropTypeReq);

    /**
     * 创建证据链,获取场景式存证编号（证据链编号）
     * 
     * @param addChainOfEvidenceReq 创建证据链请求类
     * @return 场景式存证编号
     */
    ServiceResult<String> createChainOfEvidence(@Valid AddChainOfEvidenceReq addChainOfEvidenceReq);

    /**
     * 创建摘要存证证据点
     *
     * @param addSegmentOriginalDigestReq 创建摘要存证证据点请求类
     * @return 摘要存证证据点 ID
     */
    ServiceResult<String> createSegmentOriginalDigest(@Valid AddSegmentOriginalDigestReq addSegmentOriginalDigestReq);

    /**
     * 追加证据点，将证据点追加到已存在的证据链内形成证据链
     *
     * @param appendEvidenceReq 追加证据点请求类
     * @return 结果标志，以 success 字段值标识 true/false
     */
    ServiceResult appendEvidence(@Valid AppendEvidenceReq appendEvidenceReq);

    /**
     * 场景式存证编号(证据链编号)关联到指定的用户,以便指定用户日后可以顺利出证
     * 
     * @param relateSceneEvIdWithUserReq 数据存证编号关联到指定用户请求类
     * @return 结果标志，以 success 字段值标识 true/false
     */
    ServiceResult relateSceneEvIdWithUser(@Valid RelateSceneEvIdWithUserReq relateSceneEvIdWithUserReq);

    /**
     * 存证证明查看页面链接
     *
     * @param getEviViewPageUrlReq 存证证明查看页面链接请求类
     * @return 存证证明页面查看地址
     */
    ServiceResult<String> getEviViewPageUrlReq(@Valid GetEviViewPageUrlReq getEviViewPageUrlReq);

}
